General Setup
Setup chunk
Setup reticulate
knitr::opts_chunk$set(fig.width = 8)
knitr::opts_knit$set(root.dir = normalizePath(".."))
knitr::opts_knit$get("root.dir")
[1] "/nas/groups/treutlein/USERS/tomasgomes/projects/liver_regen"
Load libraries
library(reticulate)
knitr::knit_engines$set(python = reticulate::eng_python)
py_available(initialize = FALSE)
[1] FALSE
use_python(Sys.which("python"))
py_config()
python: /home/tpires/bin/miniconda3/bin/python
libpython: /home/tpires/bin/miniconda3/lib/libpython3.8.so
pythonhome: /home/tpires/bin/miniconda3:/home/tpires/bin/miniconda3
version: 3.8.3 (default, May 19 2020, 18:47:26) [GCC 7.3.0]
numpy: /home/tpires/bin/miniconda3/lib/python3.8/site-packages/numpy
numpy_version: 1.18.5
NOTE: Python version was forced by RETICULATE_PYTHON
Load data (from all cells)
library(Seurat)
Attaching SeuratObject
library(ggplot2)
library(destiny)
library(plyr)
library(dplyr)
Attaching package: ‘dplyr’
The following objects are masked from ‘package:plyr’:
arrange, count, desc, failwith, id, mutate, rename, summarise, summarize
The following objects are masked from ‘package:stats’:
filter, lag
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
library(RColorBrewer)
Immune Hepatocytes
Subset Hepatocytes
allcells_css = readRDS(file = "data/processed/allcells_css.RDS")
Choose dimensionality reduction
# the dividing cells are T/NK, will update label at the end
hep_pops = unique(allcells_css$allcells_clusters)[grepl("Hepatocytes ",
unique(allcells_css$allcells_clusters))]
all_hep_cells = allcells_css[,allcells_css@meta.data$allcells_clusters %in% hep_pops]
all_hep_cells = suppressWarnings(SCTransform(all_hep_cells, do.correct.umi = T, verbose = F,
vars.to.regress=c("unique_name","nCount_RNA"),
variable.features.rv.th = 1, seed.use = 1,
return.only.var.genes = F,
variable.features.n = NULL))
all_hep_cells = RunPCA(all_hep_cells, verbose = F)
Cluster and get markers
pcadonorplt = list()
for(i in 1:15){
n = 2*i
pcadonorplt[[i]] = DimPlot(all_hep_cells, dims = (n-1):n,
reduction = "pca", group.by = "Donor")+
theme(aspect.ratio = 1, legend.position = "none")
}
cowplot::plot_grid(plotlist = pcadonorplt, ncol = 5, align = "hv")

ldims = list(1:30, c(1:2,4:30), c(1:2,4:20), c(1:2,4:16), c(2,4:16, 18, 20, 24:26))
for(i in 1:length(ldims)){
all_hep_cells = RunUMAP(all_hep_cells, dims = ldims[[i]], verbose = F)
plt1 = DimPlot(all_hep_cells, reduction = "umap", group.by = "Condition")
plt2 = DimPlot(all_hep_cells, reduction = "umap", group.by = "Donor")
print(plt1+plt2)
}





all_hep_cells = RunUMAP(all_hep_cells, dims = c(2,4:16, 18, 20, 24:26), verbose = F)
DimPlot(all_hep_cells, reduction = "umap", group.by = "Condition")

DimPlot(all_hep_cells, reduction = "umap", group.by = "Donor")

DimPlot(all_hep_cells, reduction = "umap", group.by = "Phase")

FeaturePlot(all_hep_cells, reduction = "umap", ncol = 4,
features = c("ALB", "SAA1", "SAA2", "HAMP", "CYP1A2", "CYP2E1", "NNMT", "MT1G"))

Save data


DimPlot(all_hep_cells, reduction = "umap", group.by = "pca20_res.0.8", label = T)
DimPlot(all_hep_cells, reduction = "umap", group.by = "pca20_res.0.3", label = T)
DimPlot(all_hep_cells, reduction = "umap", group.by = "Donor", label = F)

DimPlot(all_hep_cells, reduction = "umap", group.by = "Condition", label = F)

annot_fine = list("10" = "Hepatic cancer/regeneration response", # https://journals.sagepub.com/doi/pdf/10.1177/153537020623100203, https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2292801/, https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4656314/, https://onlinelibrary.wiley.com/doi/full/10.1002/cbf.3288
"12" = "Dividing cells",
"11" = "Hepatocyte-Immune interaction",
"7" = "Periportal inflammation-inducing", # https://www.sciencedirect.com/science/article/pii/S0753332220308738,
"0" = "Hepatocytes (HAMP+)",
"1" = "Pericentral Hepatocytes",
"8" = "Pericentral regenerating", # https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5349637/
"3" = "Fibrotic and regenerating response", # https://pubmed.ncbi.nlm.nih.gov/23770341/, https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5937820/
"5" = "Unknown 1", # https://onlinelibrary.wiley.com/doi/full/10.1002/cbf.3288
"2" = "Ribosomal",
"4" = "Unknown 2"
)
round(t(t(table(all_hep_cells$pca20_res.0.8, all_hep_cells$Condition))/colSums(table(all_hep_cells$pca20_res.0.8, all_hep_cells$Condition)))*100, 2)
round(t(t(table(all_hep_cells$pca20_res.0.3, all_hep_cells$Condition))/colSums(table(all_hep_cells$pca20_res.0.3, all_hep_cells$Condition)))*100, 2)
round(t(t(table(all_hep_cells$pca20_res.0.3, all_hep_cells$Donor))/colSums(table(all_hep_cells$pca20_res.0.3, all_hep_cells$Donor)))*100, 2)
pheatmap::pheatmap(round(t(t(table(all_hep_cells$pca20_res.0.8, all_hep_cells$Condition))/colSums(table(all_hep_cells$pca20_res.0.8, all_hep_cells$Condition)))*100, 2))
pheatmap::pheatmap(round(t(t(table(all_hep_cells$pca20_res.0.3, all_hep_cells$Condition))/colSums(table(all_hep_cells$pca20_res.0.3, all_hep_cells$Condition)))*100, 2))
LS0tCnRpdGxlOiAiSGVwYXRvY3l0ZSBwb3B1bGF0aW9uIGFuYWx5c2lzIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgoKCiMgR2VuZXJhbCBTZXR1cApTZXR1cCBjaHVuawoKYGBge3IsIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZmlnLndpZHRoID0gOCkKa25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSBub3JtYWxpemVQYXRoKCIuLiIpKQprbml0cjo6b3B0c19rbml0JGdldCgicm9vdC5kaXIiKQpgYGAKClNldHVwIHJldGljdWxhdGUKCmBgYHtyfQpsaWJyYXJ5KHJldGljdWxhdGUpCmtuaXRyOjprbml0X2VuZ2luZXMkc2V0KHB5dGhvbiA9IHJldGljdWxhdGU6OmVuZ19weXRob24pCnB5X2F2YWlsYWJsZShpbml0aWFsaXplID0gRkFMU0UpCnVzZV9weXRob24oU3lzLndoaWNoKCJweXRob24iKSkKcHlfY29uZmlnKCkKYGBgCgpMb2FkIGxpYnJhcmllcwoKYGBge3J9CmxpYnJhcnkoU2V1cmF0KQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZGVzdGlueSkKbGlicmFyeShwbHlyKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KFJDb2xvckJyZXdlcikKYGBgCgpMb2FkIGRhdGEgKGZyb20gYWxsIGNlbGxzKQoKYGBge3J9CmFsbGNlbGxzX2NzcyA9IHJlYWRSRFMoZmlsZSA9ICJkYXRhL3Byb2Nlc3NlZC9hbGxjZWxsc19jc3MuUkRTIikKYGBgCgoKCiMgSW1tdW5lIEhlcGF0b2N5dGVzClN1YnNldCBIZXBhdG9jeXRlcwoKYGBge3J9CmhlcF9wb3BzID0gdW5pcXVlKGFsbGNlbGxzX2NzcyRhbGxjZWxsc19jbHVzdGVycylbZ3JlcGwoIkhlcGF0b2N5dGVzICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlKGFsbGNlbGxzX2NzcyRhbGxjZWxsc19jbHVzdGVycykpXQphbGxfaGVwX2NlbGxzID0gYWxsY2VsbHNfY3NzWyxhbGxjZWxsc19jc3NAbWV0YS5kYXRhJGFsbGNlbGxzX2NsdXN0ZXJzICVpbiUgaGVwX3BvcHNdCmFsbF9oZXBfY2VsbHMgPSBzdXBwcmVzc1dhcm5pbmdzKFNDVHJhbnNmb3JtKGFsbF9oZXBfY2VsbHMsIGRvLmNvcnJlY3QudW1pID0gVCwgdmVyYm9zZSA9IEYsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJzLnRvLnJlZ3Jlc3M9YygidW5pcXVlX25hbWUiLCJuQ291bnRfUk5BIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLmZlYXR1cmVzLnJ2LnRoID0gMSwgc2VlZC51c2UgPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ub25seS52YXIuZ2VuZXMgPSBGLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuZmVhdHVyZXMubiA9IE5VTEwpKQphbGxfaGVwX2NlbGxzID0gUnVuUENBKGFsbF9oZXBfY2VsbHMsIHZlcmJvc2UgPSBGKQpgYGAKCkNob29zZSBkaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24KCmBgYHtyLCBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xNn0KcGNhZG9ub3JwbHQgPSBsaXN0KCkKZm9yKGkgaW4gMToxNSl7CiAgbiA9IDIqaQogIHBjYWRvbm9ycGx0W1tpXV0gPSBEaW1QbG90KGFsbF9oZXBfY2VsbHMsIGRpbXMgPSAobi0xKTpuLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWR1Y3Rpb24gPSAicGNhIiwgZ3JvdXAuYnkgPSAiRG9ub3IiKSsKICAgIHRoZW1lKGFzcGVjdC5yYXRpbyA9IDEsIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKfQpjb3dwbG90OjpwbG90X2dyaWQocGxvdGxpc3QgPSBwY2Fkb25vcnBsdCwgbmNvbCA9IDUsIGFsaWduID0gImh2IikKCmxkaW1zID0gbGlzdCgxOjMwLCBjKDE6Miw0OjMwKSwgYygxOjIsNDoyMCksIGMoMToyLDQ6MTYpLCBjKDIsNDoxNiwgMTgsIDIwLCAyNDoyNikpCmZvcihpIGluIDE6bGVuZ3RoKGxkaW1zKSl7CiAgYWxsX2hlcF9jZWxscyA9IFJ1blVNQVAoYWxsX2hlcF9jZWxscywgZGltcyA9IGxkaW1zW1tpXV0sIHZlcmJvc2UgPSBGKQogIHBsdDEgPSBEaW1QbG90KGFsbF9oZXBfY2VsbHMsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAiQ29uZGl0aW9uIikKICBwbHQyID0gRGltUGxvdChhbGxfaGVwX2NlbGxzLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gIkRvbm9yIikKICBwcmludChwbHQxK3BsdDIpCn0KCmFsbF9oZXBfY2VsbHMgPSBSdW5VTUFQKGFsbF9oZXBfY2VsbHMsIGRpbXMgPSBjKDIsNDoxNiwgMTgsIDIwLCAyNDoyNiksIHZlcmJvc2UgPSBGKQpEaW1QbG90KGFsbF9oZXBfY2VsbHMsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAiQ29uZGl0aW9uIikKRGltUGxvdChhbGxfaGVwX2NlbGxzLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gIkRvbm9yIikKRGltUGxvdChhbGxfaGVwX2NlbGxzLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gIlBoYXNlIikKRmVhdHVyZVBsb3QoYWxsX2hlcF9jZWxscywgcmVkdWN0aW9uID0gInVtYXAiLCBuY29sID0gNCwKICAgICAgICAgICAgZmVhdHVyZXMgPSBjKCJBTEIiLCAiU0FBMSIsICJTQUEyIiwgIkhBTVAiLCAiQ1lQMUEyIiwgIkNZUDJFMSIsICJOTk1UIiwgIk1UMUciKSkKYGBgCgpDbHVzdGVyIGFuZCBnZXQgbWFya2VycwoKYGBge3J9CmFsbF9oZXBfY2VsbHMgPSBGaW5kTmVpZ2hib3JzKGFsbF9oZXBfY2VsbHMsIHJlZHVjdGlvbiA9ICJwY2EiLCBkaW1zID0gYygyLDQ6MTYsIDE4LCAyMCwgMjQ6MjYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJ1bmUuU05OID0gMS81LCBmb3JjZS5yZWNhbGMgPSBULCBncmFwaC5uYW1lID0gInBjYTIwIikKYWxsX2hlcF9jZWxscyA9IEZpbmRDbHVzdGVycyhhbGxfaGVwX2NlbGxzLCBhbGdvcml0aG0gPSAyLCB2ZXJib3NlID0gRiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGgubmFtZSA9ICJwY2EyMCIsIHJlc29sdXRpb24gPSBzZXEoMC4xLCAxLjEsIDAuMSkpCkRpbVBsb3QoYWxsX2hlcF9jZWxscywgcmVkdWN0aW9uID0gInVtYXAiLCBncm91cC5ieSA9ICJwY2EyMF9yZXMuMC44IiwgbGFiZWwgPSBUKQpEaW1QbG90KGFsbF9oZXBfY2VsbHMsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAicGNhMjBfcmVzLjAuMyIsIGxhYmVsID0gVCkKRGltUGxvdChhbGxfaGVwX2NlbGxzLCByZWR1Y3Rpb24gPSAidW1hcCIsIGdyb3VwLmJ5ID0gIkRvbm9yIiwgbGFiZWwgPSBGKQpEaW1QbG90KGFsbF9oZXBfY2VsbHMsIHJlZHVjdGlvbiA9ICJ1bWFwIiwgZ3JvdXAuYnkgPSAiQ29uZGl0aW9uIiwgbGFiZWwgPSBGKQoKYWxsX2hlcF9jZWxscyA9IFNldElkZW50KGFsbF9oZXBfY2VsbHMsIHZhbHVlID0gInBjYTIwX3Jlcy4wLjgiKQpta19oZXBjZWxscyA9IEZpbmRBbGxNYXJrZXJzKGFsbF9oZXBfY2VsbHMsIGxvZ2ZjLnRocmVzaG9sZCA9IDAuMiwgcHNldWRvY291bnQudXNlID0gMC4xKQp3cml0ZS5jc3YobWtfaGVwY2VsbHNbbWtfaGVwY2VsbHMkcF92YWxfYWRqPD0wLjA1LF0sIAogICAgICAgICAgZmlsZSA9ICJyZXN1bHRzL2hlcGF0b2N5dGVzL21hcmtlcnNfaGVwYXRvY3l0ZXNfc3VicG9wXzA4LmNzdiIsIHJvdy5uYW1lcyA9IFQsIHF1b3RlID0gRikKc2F2ZVJEUyhta19oZXBjZWxscywgZmlsZSA9ICIuL3Jlc3VsdHMvaGVwYXRvY3l0ZXMvbWFya2Vyc19oZXBhdG9jeXRlc19zdWJwb3BfMDguUkRTIikKCmFsbF9oZXBfY2VsbHMgPSBTZXRJZGVudChhbGxfaGVwX2NlbGxzLCB2YWx1ZSA9ICJwY2EyMF9yZXMuMC4zIikKbWtfaGVwY2VsbHMgPSBGaW5kQWxsTWFya2VycyhhbGxfaGVwX2NlbGxzLCBsb2dmYy50aHJlc2hvbGQgPSAwLjIsIHBzZXVkb2NvdW50LnVzZSA9IDAuMSkKd3JpdGUuY3N2KG1rX2hlcGNlbGxzW21rX2hlcGNlbGxzJHBfdmFsX2Fkajw9MC4wNSxdLCAKICAgICAgICAgIGZpbGUgPSAicmVzdWx0cy9oZXBhdG9jeXRlcy9tYXJrZXJzX2hlcGF0b2N5dGVzX3N1YnBvcF8wMy5jc3YiLCByb3cubmFtZXMgPSBULCBxdW90ZSA9IEYpCnNhdmVSRFMobWtfaGVwY2VsbHMsIGZpbGUgPSAiLi9yZXN1bHRzL2hlcGF0b2N5dGVzL21hcmtlcnNfaGVwYXRvY3l0ZXNfc3VicG9wXzAzLlJEUyIpCgojbWswMiA9IEZpbmRNYXJrZXJzKGFsbF9oZXBfY2VsbHMsIGlkZW50LjEgPSAiMCIsIGlkZW50LjIgPSAiMiIsIAojICAgICAgICAgICAgICAgICAgIGxvZ2ZjLnRocmVzaG9sZCA9IDAuMiwgcHNldWRvY291bnQudXNlID0gMC4xKQpgYGAKClNhdmUgZGF0YQoKYGBge3J9CnNhdmVSRFMoYWxsX2hlcF9jZWxscywgZmlsZSA9ICJyZXN1bHRzL2hlcGF0b2N5dGVzL2FsbF9oZXBfY2VsbHMuUkRTIikKYGBgCgoKCmBgYHtyfQphbm5vdF9maW5lID0gbGlzdCgiMTAiID0gIkhlcGF0aWMgY2FuY2VyL3JlZ2VuZXJhdGlvbiByZXNwb25zZSIsICMgaHR0cHM6Ly9qb3VybmFscy5zYWdlcHViLmNvbS9kb2kvcGRmLzEwLjExNzcvMTUzNTM3MDIwNjIzMTAwMjAzLCBodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L3BtYy9hcnRpY2xlcy9QTUMyMjkyODAxLywgaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9wbWMvYXJ0aWNsZXMvUE1DNDY1NjMxNC8sIGh0dHBzOi8vb25saW5lbGlicmFyeS53aWxleS5jb20vZG9pL2Z1bGwvMTAuMTAwMi9jYmYuMzI4OAogICAgICAgICAgICAgICAgICAiMTIiID0gIkRpdmlkaW5nIGNlbGxzIiwKICAgICAgICAgICAgICAgICAgIjExIiA9ICJIZXBhdG9jeXRlLUltbXVuZSBpbnRlcmFjdGlvbiIsCiAgICAgICAgICAgICAgICAgICI3IiA9ICJQZXJpcG9ydGFsIGluZmxhbW1hdGlvbi1pbmR1Y2luZyIsICMgaHR0cHM6Ly93d3cuc2NpZW5jZWRpcmVjdC5jb20vc2NpZW5jZS9hcnRpY2xlL3BpaS9TMDc1MzMzMjIyMDMwODczOCwgCiAgICAgICAgICAgICAgICAgICIwIiA9ICJIZXBhdG9jeXRlcyAoSEFNUCspIiwKICAgICAgICAgICAgICAgICAgIjEiID0gIlBlcmljZW50cmFsIEhlcGF0b2N5dGVzIiwKICAgICAgICAgICAgICAgICAgIjgiID0gIlBlcmljZW50cmFsIHJlZ2VuZXJhdGluZyIsICMgaHR0cHM6Ly93d3cubmNiaS5ubG0ubmloLmdvdi9wbWMvYXJ0aWNsZXMvUE1DNTM0OTYzNy8KICAgICAgICAgICAgICAgICAgIjMiID0gIkZpYnJvdGljIGFuZCByZWdlbmVyYXRpbmcgcmVzcG9uc2UiLCAjIGh0dHBzOi8vcHVibWVkLm5jYmkubmxtLm5paC5nb3YvMjM3NzAzNDEvLCBodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L3BtYy9hcnRpY2xlcy9QTUM1OTM3ODIwLwogICAgICAgICAgICAgICAgICAiNSIgPSAiVW5rbm93biAxIiwgIyBodHRwczovL29ubGluZWxpYnJhcnkud2lsZXkuY29tL2RvaS9mdWxsLzEwLjEwMDIvY2JmLjMyODgKICAgICAgICAgICAgICAgICAgIjIiID0gIlJpYm9zb21hbCIsCiAgICAgICAgICAgICAgICAgICI0IiA9ICJVbmtub3duIDIiCiAgICAgICAgICAgICAgICAgICkKYGBgCgoKCgpgYGB7cn0Kcm91bmQodCh0KHRhYmxlKGFsbF9oZXBfY2VsbHMkcGNhMjBfcmVzLjAuOCwgYWxsX2hlcF9jZWxscyRDb25kaXRpb24pKS9jb2xTdW1zKHRhYmxlKGFsbF9oZXBfY2VsbHMkcGNhMjBfcmVzLjAuOCwgYWxsX2hlcF9jZWxscyRDb25kaXRpb24pKSkqMTAwLCAyKQoKcm91bmQodCh0KHRhYmxlKGFsbF9oZXBfY2VsbHMkcGNhMjBfcmVzLjAuMywgYWxsX2hlcF9jZWxscyRDb25kaXRpb24pKS9jb2xTdW1zKHRhYmxlKGFsbF9oZXBfY2VsbHMkcGNhMjBfcmVzLjAuMywgYWxsX2hlcF9jZWxscyRDb25kaXRpb24pKSkqMTAwLCAyKQoKcm91bmQodCh0KHRhYmxlKGFsbF9oZXBfY2VsbHMkcGNhMjBfcmVzLjAuMywgYWxsX2hlcF9jZWxscyREb25vcikpL2NvbFN1bXModGFibGUoYWxsX2hlcF9jZWxscyRwY2EyMF9yZXMuMC4zLCBhbGxfaGVwX2NlbGxzJERvbm9yKSkpKjEwMCwgMikKCnBoZWF0bWFwOjpwaGVhdG1hcChyb3VuZCh0KHQodGFibGUoYWxsX2hlcF9jZWxscyRwY2EyMF9yZXMuMC44LCBhbGxfaGVwX2NlbGxzJENvbmRpdGlvbikpL2NvbFN1bXModGFibGUoYWxsX2hlcF9jZWxscyRwY2EyMF9yZXMuMC44LCBhbGxfaGVwX2NlbGxzJENvbmRpdGlvbikpKSoxMDAsIDIpKQpwaGVhdG1hcDo6cGhlYXRtYXAocm91bmQodCh0KHRhYmxlKGFsbF9oZXBfY2VsbHMkcGNhMjBfcmVzLjAuMywgYWxsX2hlcF9jZWxscyRDb25kaXRpb24pKS9jb2xTdW1zKHRhYmxlKGFsbF9oZXBfY2VsbHMkcGNhMjBfcmVzLjAuMywgYWxsX2hlcF9jZWxscyRDb25kaXRpb24pKSkqMTAwLCAyKSkKYGBgCgo=